package com.qkjia.jedis;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * @author zhaoqiankun
 * @date 2021/8/31
 * 測試鏈接程序 验收五种数据类型
 */
public class Demo01 {
    public static void main(String[] args) {
        // 创建客户端
        Jedis jedis = new Jedis("192.168.200.128", 6379);
        // ping 通服务
        String pong = jedis.ping();
        System.out.println("连接成功:" + pong);
        // 关闭客户端
        jedis.close();
    }

    /**
     * 测试 Jedis-API hash
     */
    @Test
    public void testHash() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("192.168.200.128", 6379);

        // hset <key><field><value>给<key>集合中的  <field>键赋值<value>
        jedis.hset("hash1", "userName", "lisi");

        // hget <key1><field>从<key1>集合<field>取出 value
        System.out.println(jedis.hget("hash1","userName"));
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("telphone", "13881881818188");
        map.put("address", "qkjia");
        map.put("email", "zqkzuishuai@sina.com");
        // hmset <key1><field1><value1><field2><value2>... 批量设置hash的值
        jedis.hmset("hash2", map);

        // 获取多个值
        List<String> result = jedis.hmget("hash2", "telphone", "email");
        // 輸出元素
        for (String element : result) {
            System.out.println(element);
        }

        // 关闭客户端
        jedis.close();
    }

    /**
     * 测试 Jedis-API zset ( 分数 )
     */
    @Test
    public void testZset() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("192.168.200.128", 6379);

        // 添加元素分数
        jedis.zadd("zset01", 100d, "z3");
        jedis.zadd("zset01", 90d, "l4");
        jedis.zadd("zset01", 80d, "w5");
        jedis.zadd("zset01", 70d, "z6");

        jedis.zadd("china",100d,"shanghai");
        Set<String> china = jedis.zrange("china", 0, -1);
        System.out.println(china);

        // zrange <key><start><stop>  [WITHSCORES]
        // 返回有序集 key 中，下标在<start><stop>之间的元素
        // 带WITHSCORES，可以让分数一起和值返回到结果集。  0 -1 表示全部范围
        Set<String> zrange = jedis.zrange("zset01", 0, -1);

        // 输出所有成员 先进后出
        for (String e : zrange) {
            System.out.println(e);
        }

        // 关闭客户端
        jedis.close();
    }



    /**
     * 测试 Jedis-API set (自动去重)
     */
    @Test
    public void testSet() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("192.168.200.128", 6379);

        // 插入数据
        jedis.sadd("orders", "order01");
        jedis.sadd("orders", "order02");
        jedis.sadd("orders", "order03");
        jedis.sadd("orders", "order04");

        // smembers <key>取出该集合的所有值。
        Set<String> smembers = jedis.smembers("orders");
        // 输出所有成员 先进后出
        for (String order : smembers) {
            System.out.println(order);
        }
        // srem <key><value1><value2> .... 删除集合中的某个元素。
        jedis.srem("orders", "order02");
        // 关闭客户端
        jedis.close();
    }

    /**
     * 测试 Jedis-API List
     */
    @Test
    public void testLisgt() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("192.168.200.128", 6379);

        // 从左边放进 一个或多个值
        jedis.lpush("key1","lucy","mary","jack");
        //  按照索引下标获得元素(从左到右)
        //  lrange key1 0 -1   0左边第一个，-1右边第一个，（0-1表示获取所有）
        List<String> values = jedis.lrange("key1", 0, -1);
        // 输出结果
        System.out.println(values);
        // 关闭客户端
        jedis.close();
    }


    /**
     * 测试 Jedis-API: String
     */
    @Test
    public void testString() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("192.168.200.128", 6379);

        // 设置更多 key
        jedis.mset("str1", "v1", "str2", "v2", "str3", "v3");
        // 输出更多 key
        System.out.println(jedis.mget("str1","str2","str3"));
        // 关闭客户端
        jedis.close();
    }


    /**
     * 测试 Jedis-API: Key
     */
    @Test
    public void testKey() {
        // 创建Jedis对象
        Jedis jedis = new Jedis("8.135.84.118", 6379);

        // 添加
        jedis.set("k1", "v1");
        jedis.set("k2", "v2");
        jedis.set("k3", "v3");
        // keys*
        Set<String> keys = jedis.keys("*");
        System.out.println("keys的长度" + keys.size());

        // 获取所有的 key
        System.out.println("获取所有的 key");
        for (String key : keys) {
            System.out.print(key + "\t");
        }


        // 设置多个 key-value
        jedis.mset("k4", "v4", "k5", "v5");
        List<String> mget = jedis.mget("k4", "k5");
        // 获取多个 key 的值
        System.out.println(mget);

        // 是否存在
        System.out.println(jedis.exists("k1"));
        // 过期时间 -1表示永不过期，-2表示已过期
        System.out.println(jedis.ttl("k1"));
        // 获取
        String k1 = jedis.get("k1");
        System.out.println(k1);

        // 关闭客户端
        jedis.close();

    }
}
